package com.itheima.heima.info.manager.system.controller;

import com.itheima.heima.info.manager.system.domain.Student;
import com.itheima.heima.info.manager.system.factory.StudentServiceFactory;
import com.itheima.heima.info.manager.system.service.StudentService;

import java.util.Scanner;

public abstract class BaseStudentController {

    private StudentService stuService = StudentServiceFactory.getStudentService();
    //键盘录入
    private Scanner sc = new Scanner(System.in);
    //编写 入口的方法  学生的入口
    //参数  没有
    //返回值  不给
    public final void start() {

        //编写学生的12345
        //所有的入口
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("--------欢迎来到 <学生> 管理系统--------");
            System.out.println("请输入您的选择: 1.添加学生  2.删除学生  3.修改学生  4.查看学生  5.退出");
            String choice = sc.next();
            switch (choice) {
                case "1":
                    //System.out.println("新增学生");
                    addStudent();
                    break;
                case "2":
                    //System.out.println("删除学生");
                    deleteStudent();
                    break;
                case "3":
                    //System.out.println("修改学生");
                    updateStudent();
                    break;
                case "4":
                    //System.out.println("查看学生");
                    findAllStudent();
                    break;
                case "5":
                    System.out.println("感谢使用学生系统");
                    return;
                default:
                    System.out.println("请输入正确的选择");
            }
        }
    }

    public final  void updateStudent() {
        String sid = getStudentSid();
        //存在调用service修改
        Student student = getStudentInfo(sid);

        stuService.updateStudent(sid,student);
        System.out.println("修改成功");

    }

    public final String getStudentSid() {
        String sid = null;
        while (true) {
            //录入学号
            System.out.println("请输入学号");
            sid = sc.next();
            //判断是否存在
            boolean flag = stuService.isExist(sid);
            if (flag) {
                break;
            } else {
                //不存在 给出提示结束
                System.out.println("您输入的学号不存在");
            }
        }
        return sid;
    }

    public final  void deleteStudent() {
        //非空判断
        Student[] stus = stuService.findAllStudent();
        if(stus==null){
            return;
        }

        String sid = getStudentSid();
        //存在调用service删除
        stuService.deleteStudent(sid);
        System.out.println("删除成功");
    }

    public final  void findAllStudent() {
        //调用查看方法
        Student[] stus = stuService.findAllStudent();
        //判断stus 是否为null
        if (stus == null) {
            //null 没有
            //没有请先添加
            System.out.println("没有数据,请先添加");
            return;
        }
        System.out.println("学号\t姓名\t年龄\t生日");
        //有 打印title
        //遍历数组
        for (int i = 0; i < stus.length; i++) {
            // 打印每一个学生的每一项数据
            Student stu = stus[i];
            //对 学生对象进行非空判断
            if(stu!=null){
                System.out.println(stu.getSid()+"\t"+stu.getName()
                        +"\t"+stu.getAge()+"岁\t"+stu.getBirthday());
            }
        }



    }

    public final  void addStudent() {
        //调用service 创建对象 调用方法


        String sid = null;
        while (true) {
            System.out.println("请输入学号");
            sid = sc.next();
            //调用service 来判断
            boolean flag = stuService.isExist(sid);
            if (flag) {
                System.out.println("已经存在,请重新输入");
            } else {
                //不存在
                break;
            }
        }
        Student student = getStudentInfo(sid);

        //新增 到来做
        //调用service  让service去掉dao 参数  学生对象   返回值  成功 失败
        boolean result = stuService.addStudent(student);
        //提示
        if (result) {
            System.out.println("添加成功");
        } else {
            System.out.println("添加失败");
        }


    }

    public  abstract Student getStudentInfo(String sid) ;
}
